package com.dg.river.core.util;

import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.ethanhua.skeleton.RecyclerViewSkeletonScreen;
import com.scwang.smart.refresh.layout.SmartRefreshLayout;

import java.util.List;

/**
 * @作者：HuYong
 * @时间：2021/11/7 18:31
 * @描述：
 * @修改：
 */
public class RefreshUtils {

    private static RefreshUtils refreshUtils;

    public static RefreshUtils getInstance() {
        if (refreshUtils == null) {
            synchronized (RefreshUtils.class) {
                if (refreshUtils == null) {
                    refreshUtils = new RefreshUtils();
                }
            }
        }
        return refreshUtils;
    }


    /**
     * 设置刷新成功的展示
     * 适用情况：根据返回的分页参数进行判断
     *
     * @param page               当前页数
     * @param currentPage        接口返回的当前页数
     * @param allPage            接口返回的总页数
     * @param showDataList       实际展示时的数据源
     * @param getDataList        接口返回的数据源
     * @param adapter            adapter对象
     * @param smartRefresh       smartRefreshLayout
     * @param skeletonScreenList 骨架屏（可为空）
     * @param <T>
     * @param <V>
     */
    public <T, V extends BaseQuickAdapter<T, BaseViewHolder>> void setRefreshSettingSuccess(
            int page,
            int currentPage,
            int allPage,
            List<T> showDataList,
            List<T> getDataList,
            V adapter,
            SmartRefreshLayout smartRefresh,
            RecyclerViewSkeletonScreen skeletonScreenList) {
        // 开启刷新
        smartRefresh.setEnableRefresh(true);
        // 清空数据
        if (page == 1) {
            showDataList.clear();
        }
        showDataList.addAll(getDataList);
        adapter.notifyDataSetChanged();
        if (page == 1) {
            // 刷新/初次获取数据 // 判断数据页数
            if (currentPage < allPage) {
                // 有其他数据，则开启加载更多
                smartRefresh.setEnableLoadMore(true);
                // 恢复没有更多数据的原始状态
                smartRefresh.setNoMoreData(false);
            } else {
                // 没有其他数据，禁止加载更多
                smartRefresh.setEnableLoadMore(false);
                // 没有更多数据
                smartRefresh.setNoMoreData(true);
            }
            smartRefresh.finishRefresh();
        } else {
            // 加载更多
            if (currentPage == allPage) {
                // 最后一页，结束加载更多，并展示没有更多数据
                smartRefresh.finishLoadMoreWithNoMoreData();
            } else {
                smartRefresh.setEnableLoadMore(true);
                // 不是最后一页，结束加载更多
                smartRefresh.finishLoadMore();
            }
        }
    }

    /**
     * 设置刷新成功的展示
     * 适用情况：不返回分页的相关信息，单纯根据数据是否满足一页的条数进行判断
     *
     * @param page               当前页数
     * @param size               每页获取的数据条数
     * @param showDataList       实际展示时的数据源
     * @param getDataList        接口返回的数据源
     * @param adapter            adapter对象
     * @param smartRefresh       SmartRefreshLayout
     * @param skeletonScreenList 骨架屏（可为空）
     * @param <T>
     * @param <V>
     */
    public <T, V extends BaseQuickAdapter<T, BaseViewHolder>> void setRefreshSettingSuccess(
            int page,
            int size,
            boolean lastPage,
            List<T> showDataList,
            List<T> getDataList,
            V adapter,
            SmartRefreshLayout smartRefresh,
            RecyclerViewSkeletonScreen skeletonScreenList) {
        // 开启刷新
        smartRefresh.setEnableRefresh(true);
        // 清空数据
        if (page == 1) {
            showDataList.clear();
        }
        showDataList.addAll(getDataList);
        adapter.notifyDataSetChanged();
        if (page == 1) {
            // 刷新/初次获取数据 // 判断数据页数
            if (getDataList.size() == size && !lastPage) {
                // 有其他数据，则开启加载更多
                smartRefresh.setEnableLoadMore(true);
                // 恢复没有更多数据的原始状态
                smartRefresh.setNoMoreData(false);
            } else {
                // 最后一页，结束加载更多，并展示没有更多数据
                smartRefresh.finishLoadMoreWithNoMoreData();
            }
            smartRefresh.finishRefresh();
        } else {
            // 加载更多
            if (getDataList.size() < size || lastPage) {
                // 最后一页，结束加载更多，并展示没有更多数据
                smartRefresh.finishLoadMoreWithNoMoreData();
            } else {
                smartRefresh.setEnableLoadMore(true);
                // 不是最后一页，结束加载更多
                smartRefresh.finishLoadMore();
            }
        }
    }

    /**
     * 设置刷新失败的展示
     *
     * @param page               当前页数
     * @param smartRefresh       SmartRefreshLayout
     * @param skeletonScreenList 骨架屏（可为空）
     */
    public void setRefreshSettingFail(int page, SmartRefreshLayout smartRefresh, RecyclerViewSkeletonScreen skeletonScreenList) {
        // 开启刷新
        smartRefresh.setEnableRefresh(true);
        if (page != 1) {
            // 如果加载更多没有获取到数据，应该结束加载更多，并不能再执行加载更多
            smartRefresh.finishLoadMore();
        } else {
            // 如果刷新没有获取到数据，应该结束刷新，并且也不能加载更多
            smartRefresh.finishRefresh();
        }
        smartRefresh.setEnableLoadMore(false);
    }
}
